#pragma once
#include<iostream>
#include<syscall.h>
#include<queue>
#include<vector>
#include<mutex>
#include<unistd.h>
#include<thread>
#include<condition_variable>
#include<functional>
#include<future>
#include<atomic>

class ThreadPoll
{
private:
    // 线程池中的线程
    std::vector<std::thread> threads_;
    // 任务队列
    std::queue<std::function<void()>> taskQueue_;
    // 任务队列同步的互斥锁
    std::mutex mutex_;
    // 任务队列同步的条件变量
    std::condition_variable condition_;
    // 在析构函数中，将 stop_ 的值设置为 true ，全部的线程将退出
    std::atomic_bool stop_;
    // 线程种类，例如：IO、WORKS。[注意，这个字段完全没用，单纯只是用来输出日志的]
    std::string threadType_;
public:
    // 在构造函数中将启动 threadNum 个线程
    ThreadPoll(size_t threadNum, const std::string &threadType);
    // 将任务添加到队里中
    void AddTask(std::function<void()> task);
    // 在析构函数中将停止线程
    ~ThreadPoll();
};